package ve.com.wayoyo.wuml_case;

import java.util.ArrayList;

import ve.com.wayoyo.wuml_case.DibujoDiagramas.DiagramaClases;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.DiagramaER;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.VistaDiagrama;

public class DataTipe {

	private static DataTipe _instancia;

	private String[] _datosMySql;
	private String[] _datosOracle;
	private String[] _datosSqlServer;
	private String[] _datosJava;
	private String[] _datosC;

	private DataTipe() {
		super();
	}

	public static DataTipe getInstancia() {
		if (_instancia == null) {
			_instancia = new DataTipe();

			_instancia._datosSqlServer = new String[] {
				"BIGINT","BINARY","BIT","BOOLEAN","BLOB","CHAR","DATE","DATETIME",
				"DECIMAL","DOUBLE","ENUM","FLOAT","INT","INTEGER","LONG","LONGBLOB",
				"LONGTEXT","LONGRAW","MEDIUMBLOB","MEDIUMINT","MEDIUMTEXT","NCHAR",
				"NVARCHAR2","NUMBER","NUMERIC","RAW","REAL","SERIAL","SMALLINT","TEXT",
				"TIME","TIMESTAMP","TINYBLOB","TINYINT","TINYTEXT","VARBINARY","VARCHAR",
				"VARCHAR2","YEAR"};
			_instancia._datosMySql = new String[] {
				"BIGINT","BINARY","BIT","BOOLEAN","BLOB","CHAR","DATE","DATETIME",
				"DECIMAL","DOUBLE","ENUM","FLOAT","INT","INTEGER","LONG","LONGBLOB",
				"LONGTEXT","LONGRAW","MEDIUMBLOB","MEDIUMINT","MEDIUMTEXT","NCHAR",
				"NVARCHAR2","NUMBER","NUMERIC","RAW","REAL","SERIAL","SMALLINT","TEXT",
				"TIME","TIMESTAMP","TINYBLOB","TINYINT","TINYTEXT","VARBINARY","VARCHAR",
				"VARCHAR2","YEAR"};
			_instancia._datosOracle = new String[] {
				"BIGINT","BINARY","BIT","BOOLEAN","BLOB","CHAR","DATE","DATETIME",
				"DECIMAL","DOUBLE","ENUM","FLOAT","INT","INTEGER","LONG","LONGBLOB",
				"LONGTEXT","LONGRAW","MEDIUMBLOB","MEDIUMINT","MEDIUMTEXT","NCHAR",
				"NVARCHAR2","NUMBER","NUMERIC","RAW","REAL","SERIAL","SMALLINT","TEXT",
				"TIME","TIMESTAMP","TINYBLOB","TINYINT","TINYTEXT","VARBINARY","VARCHAR",
				"VARCHAR2","YEAR"};
			_instancia._datosJava = new String[] { "byte", "short", "int",
					"long", "float", "double", "char", "String", "boolean" };

			_instancia._datosC = new String[] { "byte", "sbyte", "int", "uint",
					"short", "ushort", "long", "ulong", "float", "double",
					"char", "bool", "object", "string", "decimal" };

		}
		return _instancia;
	}

	public String[] getDatos() {
		if (VistaDiagrama.getVista().getDiagrama() instanceof DiagramaER) {
			if (UserPref.getInstancia().getLanguaje().equals("mySQL"))
				return this._datosMySql;
			else if (UserPref.getInstancia().getLanguaje().equals("oracle"))
				return this._datosOracle;
			else if (UserPref.getInstancia().getLanguaje().equals("sqlServer")) {
				return this._datosSqlServer;
			} else
				return this._datosMySql;
		} else if (VistaDiagrama.getVista().getDiagrama() instanceof DiagramaClases) {
			if (UserPref.getInstancia().getLanguaje().equals("java"))
				return this._datosJava;
			else if (UserPref.getInstancia().getLanguaje().equals("C#"))
				return this._datosC;
			else
				return this._datosJava;
		}
		return null;

	}

	public Boolean dataExist(String dato) {
		boolean flag = false;
		if (VistaDiagrama.getVista().getDiagrama() instanceof DiagramaER) {
			if (UserPref.getInstancia().getLanguaje().equals("mySQL")) {
				for (String str : _datosMySql) {
					if (dato.equals(str)) {
						flag = true;
					}
				}
			} else if (UserPref.getInstancia().getLanguaje().equals("oracle")) {
				for (String str : _datosOracle) {
					if (dato.equals(str)) {
						flag = true;
					}
				}
			} else if (UserPref.getInstancia().getLanguaje()
					.equals("sqlServer")) {
				for (String str : _datosSqlServer) {
					if (dato.equals(str)) {
						flag = true;
					}
				}
			} else {
				for (String str : _datosMySql) {
					if (dato.equals(str)) {
						flag = true;
					}
				}
			}
		} else if (VistaDiagrama.getVista().getDiagrama() instanceof DiagramaClases) {
			if (UserPref.getInstancia().getLanguaje().equals("java")) {
				for (String str : _datosJava) {
					if (dato.equals(str)) {
						flag = true;
					}
				}
			} else if (UserPref.getInstancia().getLanguaje().equals("C#")) {
				for (String str : _datosC) {
					if (dato.equals(str)) {
						flag = true;
					}
				}
			} else {
				for (String str : _datosJava) {
					if (dato.equals(str)) {
						flag = true;
					}
				}
			}
		}
		return flag;
	}

	public void DataAdd(String dato) {

		if (VistaDiagrama.getVista().getDiagrama() instanceof DiagramaER) {
			if (UserPref.getInstancia().getLanguaje().equals("mySQL")) {
				ArrayList<String> list_dat = new ArrayList<String>();
				for (String string : _datosMySql) {
					list_dat.add(string);
				}
				list_dat.add(dato);
				_datosMySql = new String[list_dat.size()];
				_datosMySql = list_dat.toArray(_datosMySql);
			} else if (UserPref.getInstancia().getLanguaje().equals("oracle")) {
				ArrayList<String> list_dat = new ArrayList<String>();
				for (String string : _datosOracle) {
					list_dat.add(string);
				}
				list_dat.add(dato);
				_datosOracle = new String[list_dat.size()];
				_datosOracle = list_dat.toArray(_datosOracle);
			} else if (UserPref.getInstancia().getLanguaje()
					.equals("sqlServer")) {
				ArrayList<String> list_dat = new ArrayList<String>();
				for (String string : _datosSqlServer) {
					list_dat.add(string);
				}
				list_dat.add(dato);
				_datosSqlServer = new String[list_dat.size()];
				_datosSqlServer = list_dat.toArray(_datosSqlServer);
			} else {
				ArrayList<String> list_dat = new ArrayList<String>();
				for (String string : _datosMySql) {
					list_dat.add(string);
				}
				list_dat.add(dato);
				_datosMySql = new String[list_dat.size()];
				_datosMySql = list_dat.toArray(_datosMySql);
			}
		} else if (VistaDiagrama.getVista().getDiagrama() instanceof DiagramaClases) {
			if (UserPref.getInstancia().getLanguaje().equals("java")) {
				ArrayList<String> list_dat = new ArrayList<String>();
				for (String string : _datosJava) {
					list_dat.add(string);
				}
				list_dat.add(dato);
				_datosJava = new String[list_dat.size()];
				_datosJava = list_dat.toArray(_datosJava);
			} else if (UserPref.getInstancia().getLanguaje().equals("C#")) {
				ArrayList<String> list_dat = new ArrayList<String>();
				for (String string : _datosC) {
					list_dat.add(string);
				}
				list_dat.add(dato);
				_datosC = new String[list_dat.size()];
				_datosC = list_dat.toArray(_datosC);
			} else {
				ArrayList<String> list_dat = new ArrayList<String>();
				for (String string : _datosJava) {
					list_dat.add(string);
				}
				list_dat.add(dato);
				_datosJava = new String[list_dat.size()];
				_datosJava = list_dat.toArray(_datosJava);
			}

		}
	}
}
